#ifndef __BLQUEUE_H__
#define __BLQUEUE_H__

#include <queue>
#include <iostream>
#include "Mutex.h"

template<typename T>
class BLQueue {
	Mutex m;
	std::queue<T> c;
public:
	BLQueue() {
	}
	;
	void push(const T &i) {
		Lock l(m);
		c.push(i);
		l.signal();
	}
	;
//	void pop() {
//		Lock l(m);
//		c.pop();
//	}
//	;
	T& front() {
		Lock l(m);
		T t = c.front();
		return t;
	}
	;
	size_t size() {
		Lock l(m);
		size_t tam = c.size();
		return tam;
	}
	;
	T pop2() {
		Lock l(m);
		if (c.size() == 0){
			l.wait();
		}
		T t = c.front();
		c.pop();
		return t;
	}
	;
};

#endif
